<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: 麦当苗儿 <zuojiazi@vip.qq.com>
// +----------------------------------------------------------------------
namespace Admin\Model;

use Think\Model;

/**
 * 配置模型
 * 
 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
 */
class ConfigModel extends Model
{
    
    const TYPE_ARRAY = 3;

    protected $_validate = array(
        array(
            'name',
            'require',
            '标识不能为空',
            self::EXISTS_VALIDATE,
            'regex',
            self::MODEL_BOTH
        ),
        array(
            'name',
            '',
            '标识已经存在',
            self::VALUE_VALIDATE,
            'unique',
            self::MODEL_BOTH
        ),
        array(
            'title',
            'require',
            '名称不能为空',
            self::MUST_VALIDATE,
            'regex',
            self::MODEL_BOTH
        )
    );

    protected $_auto = array(
        array(
            'name',
            'strtoupper',
            self::MODEL_BOTH,
            'function'
        ),
        array(
            'create_time',
            NOW_TIME,
            self::MODEL_INSERT
        ),
        array(
            'update_time',
            NOW_TIME,
            self::MODEL_BOTH
        ),
        array(
            'status',
            '1',
            self::MODEL_BOTH
        )
    );

    /**
     * 获取配置列表
     * 
     * @return array 配置数组
     * @author 麦当苗儿 <zuojiazi@vip.qq.com>
     */
    public function lists()
    {
        $data = $this->where(['status' => 1])
            ->field('type,name,value')
            ->select();
        
        $config = array();
        if ($data && is_array($data)) {
            foreach ($data as $value) {
                $config[$value['name']] = $this->parse($value['type'], $value['value']);
            }
        }
        return $config;
    }

    /**
     * 根据配置类型解析配置
     * 
     * @param integer $type 配置类型
     * @param string $value 配置值
     */
    private function parse($type, $value)
    {
        switch ($type) {
            case self::TYPE_ARRAY: // 解析数组
                $array = preg_split('/[,;\r\n]+/', trim($value, ",;\r\n"));
                if (strpos($value, ':')) {
                    $value = array();
                    foreach ($array as $val) {
                        list ($k, $v) = explode(':', $val);
                        $value[$k] = $v;
                    }
                } else {
                    $value = $array;
                }
                break;
        }
        return $value;
    }
}
